import cv2  # 导入 OpenCV 库，用于图像处理
import numpy as np  # 导入 NumPy 库，用于数值计算

"""
图像加运算
"""
# 使用 cv2.imread 读取图像文件，返回一个 NumPy 数组
# r"C:\Users\zch\Desktop\1.png" 是图像文件的路径
img = cv2.imread("1.png")

# 检查图像是否成功读取
if img is None:
    print("无法读取图片，请检查文件路径或文件完整性！")
else:
    # 使用 cv2.resize 调整图像大小
    # img 是原始图像，(400, 550) 是目标宽度和高度
    img_resized = cv2.resize(img, (400, 550))

    # 使用 cv2.imshow 显示调整大小后的图像
    # "showing" 是窗口标题，img_resized 是要显示的图像
    cv2.imshow("showing", img_resized)

    # 使用 cv2.waitKey 等待用户按键
    # 参数 0 表示无限期等待，直到用户按下任意键
    cv2.waitKey(0)

    # 创建一个与图像形状相同的全1矩阵
    # img_resized.shape 是图像的形状，dtype="uint8" 表示矩阵的数据类型为无符号8位整数
    # *100 表示将矩阵中的每个元素乘以100，用于后续的像素加法
    m = np.ones(img_resized.shape, dtype="uint8") * 100

    # 使用 cv2.add 对图像进行加法运算
    # img_resized 是原始图像，m 是加法矩阵
    # 结果是图像的每个像素值加上100
    result = cv2.add(img_resized, m)

    # 显示加法运算后的图像
    cv2.imshow("showing2", result)

    # 等待用户按键
    cv2.waitKey(0)

# """
# 图像减运算
# """
# # 创建一个与图像形状相同的全1矩阵
# # img_resized.shape 是图像的形状，dtype="uint8" 表示矩阵的数据类型为无符号8位整数
# # *50 表示将矩阵中的每个元素乘以50，用于后续的像素减法
# m = np.ones(img_resized.shape, dtype="uint8") * 100
#
# # 使用 cv2.subtract 对图像进行减法运算
# # img_resized 是原始图像，m 是减法矩阵
# # 结果是图像的每个像素值减去50
# result2 = cv2.subtract(img_resized, m)
#
# # 显示减法运算后的图像
# cv2.imshow("showing3", result2)
#
# # 等待用户按键
# cv2.waitKey(0)
#
# # 关闭所有 OpenCV 创建的窗口
# cv2.destroyAllWindows()